import { extname } from 'path';
import { HttpException, HttpStatus } from '@nestjs/common';

// 配置文件上传目录
export const UPLOAD_DIR = './uploads';

// 清理文件名，移除特殊字符
export const sanitizeFileName = (fileName: string) => {
  // 获取扩展名并转为小写
  const ext = extname(fileName).toLowerCase();

  // 如果没有扩展名，直接返回原文件名
  if (!ext) return fileName;

  // 提取文件名主体（不包含扩展名）
  const baseName = fileName.slice(0, -ext.length);

  // 只清理文件名主体中的路径分隔符（防止路径遍历攻击）
  const cleanBaseName = baseName.replace(/[\\\/]/g, '_');

  // 组合清理后的文件名和原始扩展名
  return `${cleanBaseName}${ext}`;
};

const ALLOWED_EXTENSIONS = [
  '.jpg',
  '.jpeg',
  '.png',
  '.gif',
  '.pdf',
  '.txt',
  '.docx',
  '.excel',
];

// 文件过滤函数
export const fileFilter = () => {
  return (req, file, callback) => {
    const ext = extname(file.originalname).toLowerCase();

    if (!ALLOWED_EXTENSIONS.includes(ext)) {
      return callback(
        new HttpException(
          `仅支持以下文件类型: ${ALLOWED_EXTENSIONS.join(', ')}`,
          HttpStatus.BAD_REQUEST,
        ),
        false,
      );
    }

    callback(null, true);
  };
};
